package work.thread_eg.concurrent.lock;


import java.util.concurrent.locks.ReentrantLock;

/**
 *
 * ReentrantLock的源码解读  volatile + CAS
 * 源码解读的基础 ： 数据结构基础和设计模式
 *
 * ReentrantLock的内部 NonfairSync类继承了抽象类AbstractQueuedSynchronizer (AQS)
 * NonfairSync-> Sync -> AbstractQueuedSynchronizer(AQS)
 *      (AQS是CountDownLatch CyclicBarrier Semaphore等的核心）
 *
 * AQS的结构 (CLH)
 * 1) volatile int state 保证线程可见性
 * ReentrantLock中表示当前线程对锁的控制状态 （加锁和解锁）
 * CountDownLatch中表示state表示数量
 *
 * 2) 内部队列
 * Node内部类 每个Node装有线程对象  是个双向列表
 *
 * 3) 内部操作
 *    操作state变量 使用的compareAndSet(CAS)相关的方法
 *    队列的入队和出队(就是含有Thread对象的Node节点）都是用的CAS的方法 compareAndSetTail()方法
 */
public class ReentrantLockTest04<T> {

    public static void main(String[] args) throws InterruptedException {
        ReentrantLock lock = new ReentrantLock();
        lock.lock();
    }
}
